perm filename DISPLA.FAI[REV,MUS] blob
sn#281463 filedate 1977-05-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE DISPLA
C00004 00003 DISPLA: SETO line,
C00005 00004 Both: HRRZ len,length
C00007 ENDMK
C⊗;
TITLE DISPLA
INTERNAL DISPLA
;Convert SAIL strings to DPY outputs for III and Data Disk
;INTERNAL PROCEDURE display(
; INTEGER position;
; STRING text;
; INTEGER pog);
DEFINE posit <-2(p)>
DEFINE pog <-1(p)>
DEFINE length <-1(sp)>
DEFINE string <(sp)>
DEFINE nargs <2>
DEFINE nsargs <1>
DEFINE SUBRET <
SUB p,[<nargs>+1,,<nargs>+1]
SUB sp,[2*<nsargs>,,2*<nsargs>]
JRST @<nargs>+1(p)
>
;AC's
p←←17
sp←←16
cmd←←1
line←←0
tmp←←0
bp←←1
len←←2
c←←3
;Line characteristics
DDDLIN←←20000
IIILIN←←400000
DEFINE CW(C1,B1,C2,B2,C3,B3) <
<BYTE (8)<B1>,<B2>,<B3> (3)<C1>,<C2>,<C3>>!4
>
;Command names for DD command bytes
EXCT←←0; Execute
FNCN←←1 ALPHBG←←6 ALPHA←←46; Function
CHNL←←2; Channel select
COLM←←3; Column select
HILIN←←4; Set high 5 bits of line address
LOLIN←←5 Set low 4 bits of line address
DISPLA: SETO line,
GETLIN line
AOJE line,Detchd
TLNN line,DDDLIN!IIILIN
JRST Notdpy
JUMPL line,IIIdpy
DDDdpy: MOVE tmp,[CW FNCN,ALPHA, CHNL,0, FNCN,ALPHA]
MOVEM tmp,DPYBUF
MOVE tmp,[CW COLM,2, HILIN,0, LOLIN,0]
MOVEM tmp,DPYBUF+1
MOVN tmp,posit
ASH tmp,-1
ADDI tmp,400
DPB tmp,[POINT 4,DPYBUF+1,23]
LSH tmp,-4
DPB tmp,[POINT 5,DPYBUF+1,15]
JRST Both
IIIdpy: MOVE tmp,[BYTE (11)<-777>,0 (3)2,2 (2)1,2 (4)6]
MOVEM tmp,DPYBUF+1;
MOVE tmp,posit
DPB tmp,[POINT 11,DPYBUF+1,21]
Both: HRRZ len,length
MOVE bp,[POINT 7,TXTBUF]
CAILE len,TXTLEN-2 ;to allow for CR LF we add
MOVEI len,TXTLEN-2
MOVE tmp,[TXTBUF,,TXTBUF+1]
MOVEI c,1
MOVEM c,TXTBUF
BLT tmp,TXTEND
JUMPL len,Nullst
Loop: ILDB c,string
IDPB c,bp
SOJG len,Loop
MOVEI c,15
IDPB c,bp
MOVEI c,12
IDPB c,bp
SETZM 1(bp)
HRRZI bp,2-DPYBUF(bp)
MOVEM bp,DPYHED+1
MOVE cmd,[UPGIOT 0,DPYHED]
MOVE tmp,pog
DPB tmp,[POINT 4,cmd,12]
XCT cmd
Nullst:
Notdpy:
Detchd: SUBRET
;Data blocks
DPYHED: 200000,,DPYBUF
TXTLEN+3
0
DPYBUF+1
DPYBUF: BLOCK 2
TXTBUF: BLOCK =200
TXTEND: 0
0
TXTLEN←←(1+TXTEND-TXTBUF)*5
END